{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "\n",
    "from text_recognizer.datasets.emnist_dataset import EmnistDataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EMNIST Dataset\n",
      "Num classes: 80\n",
      "Mapping: {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F', 16: 'G', 17: 'H', 18: 'I', 19: 'J', 20: 'K', 21: 'L', 22: 'M', 23: 'N', 24: 'O', 25: 'P', 26: 'Q', 27: 'R', 28: 'S', 29: 'T', 30: 'U', 31: 'V', 32: 'W', 33: 'X', 34: 'Y', 35: 'Z', 36: 'a', 37: 'b', 38: 'c', 39: 'd', 40: 'e', 41: 'f', 42: 'g', 43: 'h', 44: 'i', 45: 'j', 46: 'k', 47: 'l', 48: 'm', 49: 'n', 50: 'o', 51: 'p', 52: 'q', 53: 'r', 54: 's', 55: 't', 56: 'u', 57: 'v', 58: 'w', 59: 'x', 60: 'y', 61: 'z', 62: ' ', 63: '!', 64: '\"', 65: '#', 66: '&', 67: \"'\", 68: '(', 69: ')', 70: '*', 71: '+', 72: ',', 73: '-', 74: '.', 75: '/', 76: ':', 77: ';', 78: '?', 79: '_'}\n",
      "Input shape: [28, 28]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "emnist_data = EmnistDataset()\n",
    "print(emnist_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((697932, 28, 28), (697932, 80))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "emnist_data.load_or_generate_data()\n",
    "emnist_data.x_train.shape, emnist_data.y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((116323, 28, 28), (116323, 80))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "emnist_data.x_test.shape, emnist_data.y_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Ipc98sgjLps/f344nkZp1jqOVkGMVvKMVqq85ZZbwseMVlG89957XfbP//zPLttpp51cFq0MevHFF7ssavarVbSSbdbt2qPvQyPVu4ajJs+oQVyKV3CtturnhqJm41mzZrksaiav1qgc/Vw8//zzLosaUaPnHa3aGd33ueeeC8dDk2d1V0s6coPsPEl3pZS2k3RX5XOgyK4WdYxyu1rUMEqk3QlGSul+SRtuIHG8pCmVj6dImpDzuIBcUccoO2oYZdPRdTCGp5TeXxDhVUl+B6wKM5skaVIHjwN0pkx1TA2jwKhhFFbNC22llJKZVf1lZUppsqTJkvRBtwMa6YPqmBpGGVDDKJqOXkWyyMxGSFLl767ZwYKyo45RdtQwCqujZzBuknSapEsrf0/LbUT4K1En9l577eWy3XbbLbx/tExzJFrC+6abbnLZ1KlTXfb222+7rGgd+FWUvo6j1zdaznnZsg1/dS+9/PLLmY9z8803u+ynP/2py/7lX/7FZT/84Q9d1hlXjGTV0tLispLUa6TTajiqrWrvM9Ey3JHo+xxdMRK997z44osuq7b1QFTv0XGOPfZYl0VXkfTq1SvTfVesWBGOZ86cOS6LruxqNu2ewTCzayU9LGkHM1tgZqerrZgPM7PnJB1a+RwoLOoYZUcNo2zaPYORUjq5ypcOyXksQKehjlF21DDKhpU8AQBA7phgAACA3NV8mSo6V9TEdOedd7rs+9//fnj/T33qUy7bYostXBY1BkZLKvfp08dlq1atclm15ivka7/99nPZ4MGDXfa9733PZa+99lrm40RLaY8ePTrTfX/961+7LBp3rcspDxgwINPt3nvvvZqO01VE389oeWxJ2nzzzTM9ZlRHUb1G70fRfauJ3n+iJs+oGXTIkCEui5pTqaP2cQYDAADkjgkGAADIHRMMAACQOyYYAAAgdzR5llC0EuFll10W3jZaEW/8+PEu+9a3vuWyfffd12X777+/yx544AGX1dqwh2zGjRvnsqgZbuHChbkf+95773XZj370I5ddeqlf++moo45y2ZQpU1y2MY4++uhMt5s+fXpNx+nKolUupbjmoixqltxss80yZRsjasB8/vnnXfbKK6+4rGfPni5bvny5y2bOnOmyefPmZR5PV8AZDAAAkDsmGAAAIHdMMAAAQO6YYAAAgNzR5NkkotU0pbjpqHt3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7KhhlA0reQIAgNwxwQAAALmr+TLVepk/f36Yf+tb33LZMccc47KBAwdmOk60/Osee+zhsj/96U/h/UvS3JirrvicO1v0PX3ggQdctmLFikyPFy3rXa1ROWocvffee122cOFCl7344osu6927t8vOO88vOFltmf5onNdff73LLrzwQpdFS5K/++674XHQ3KKmzHHjxmXKom0lItWaL1999VWXzZw502VRA3JZGjojnMEAAAC5Y4IBAAByxwQDAADkjgkGAADIXWmaPKs1ukRNXI8++qjLDjvsMJd169bNZVEz6Kc+9SmXPf/88+F4ohUKgTwsWbLEZffcc4/LZs2a5bKRI0e6bOjQoeFxotqOms+iRtRBgwa57Ac/+IHLdtppp/DYkZtvvtllF110kcteeOEFl5W5QQ4dF723H3HEES77+te/7rLoZyV6vGiV5GjVTUm6+OKLXXb77be7rNkakDmDAQAAcscEAwAA5I4JBgAAyB0TDAAAkLvSNHlWE61k+LOf/cxl2267rcs+/OEPuyzaevyUU05x2TPPPBOOJ9puN2rOA/IQNVpGjcZRFm1fLcWNkdFtt9lmG5ftu+++Ltt///1dFo17zpw54Xh++ctfuixaMZSGzq5nyJAhYR41an7uc59z2ZgxY1wWNXRGtdXS0uKyBx98MBzPrbfe6rJVq1aFt20mnMEAAAC5Y4IBAAByxwQDAADkrt0JhpldZWaLzWz2etmFZrbQzGZW/hzducMEakMdo+yoYZSNtdcYZWYHSHpT0n+mlMZWsgslvZlSunyjDmaWexdWjx49XDZs2DCX7bPPPi77yle+4rLx48dnOu6iRYvC/N/+7d9c9uMf/9hl0SpwaNdjKaVsL9AG8qrjzqjhookaOqOG6Gh79L322stlUcPdY4895rJoC3dJmjFjhstKvOIhNdxB3bv7axLOPPPM8LYTJkxw2d577+2yaAv3yOLFi1127rnnuuyhhx4K7x+tjlvipuTMNdzuGYyU0v2SltU8JKCBqGOUHTWMsqmlB+NsM5tVOW3nN/AAyoE6RtlRwyikjk4wfiJpG0njJLVK+na1G5rZJDObYWb+PCfQWJnqmBpGgVHDKKwOTTBSSotSSutSSu9JulLSnh9w28kppfEd/b0j0Fmy1jE1jKKihlFkHVrJ08xGpJTe3795oqTZH3T7zrTDDju47JhjjnHZb3/7W5ctWLDAZR/96EddFq3uWW0FuSiP7k+TZ+MVqY6LJNrGPdrW+oQTTnBZ1HQ9ffp0l11wwQUuq7aS55o1a8IcXauGo4bMUaNGhbfdaqutMt0/EjVftra2umzmzJkue+WVVzI/ZlfQ7gTDzK6VdKCkIWa2QNIFkg40s3GSkqQWSWd04hiBmlHHKDtqGGXT7gQjpXRyEP+iE8YCdBrqGGVHDaNsWMkTAADkjgkGAADIXWm2a49WEpSkf/3Xf3XZ4Ycf7rKDDjrIZVFDZrUtrDcUbTctSePGjXNZtLLowoULMx0H6Cy9evUK86OOOipT1rNnT5ctXbrUZb/61a9cNnu270Wk8Rnvixoyo9U5o0ZjSdpyyy1dFr23R1umR42al1/uF0p9+umnXVbiFWY7BWcwAABA7phgAACA3DHBAAAAuWOCAQAAcscEAwAA5K6QV5FE3e2nnHJKeNtDDz3UZb179850u0jWq0ieeeaZML/ssstctnjx4kyPCXSWbt26ueyII44IbxstCx5dcdXS0uKyBx54IFPGFSN4X/R+v/3227vsK1/5isvGjBkTPmb0Ph5d+RddCTJ16lSX3XjjjS7jipH2cQYDAADkjgkGAADIHRMMAACQOyYYAAAgd4Vs8oyW1j744IPD22622WYuixp8oia3SErJZWvXrnXZH//4x/D+jz/+uMvWrFmT6dhAZ4mWXo6WtZekLbbYItNjPvXUUy679957XfbGG29kejx0Tf3793fZdttt57IRI0a4LGtTvhQ3Zc6cOTNTRkNnx3AGAwAA5I4JBgAAyB0TDAAAkLt2JxhmNsrM7jGzOWb2lJl9sZIPMrM7zOy5yt8DO3+4wMajhtEMqGOUTZYmz7WSvpxSetzM+kl6zMzukPT3ku5KKV1qZudJOk/SuRs7gKhJZ8stt3RZjx49Nvah2xU1dEbZ7NmzXXb//feHj0kzUCF1ag0XTdTQOXHiRJedeuqp4f2jxulFixa57K677nLZfffd5zJ+JnJT+jqOavOoo45y2YQJE1wWrSZbTbRS7O233+6ySy65xGULFizI9HhoX7tnMFJKrSmlxysfr5Q0V9JIScdLmlK52RRJviKAAqCG0QyoY5TNRl2mamZjJO0u6VFJw1NKrZUvvSppeJX7TJI0qeNDBPJDDaMZbGwdU8NohMxNnmbWV9L1ks5JKa1Y/2up7fcK/ncLbV+bnFIan1IaX9NIgRpRw2gGHaljahiNkGmCYWY91FbQ16SUbqjEi8xsROXrIySxZSgKixpGM6COUSbt/orE2rowfyFpbkrpO+t96SZJp0m6tPL3tI4MIGqqXLVqlcsGDx5cbXwdPk4k2oL6c5/7nMuibX6leEtgNFZn13DRjBw50mXnnHOOy0aPHh3ef/Fi/+/TN77xDZdF21qzamfnKVsdd+/u/3mJVuM866yzXPaRj3zEZZts4v8/HP1bIUkLFy502dVXX+2yF1980WU0dOYnSw/GvpI+K+lJM3t/DdWvqa2Yf2dmp0uaL+nEzhkiUDNqGM2AOkaptDvBSCk9KKnaaYJD8h0OkD9qGM2AOkbZsJInAADIHRMMAACQu0Ju1x5tA/0P//AP4W0vvvhil0VNblHz5ZNPPumyn/3sZy574oknwmMDjRY1vu22224ui7Zgj37OJOm6665zWdTQuWTJkixDBP5b1PjZp08fl2Vdubm1tTXMH3nkEZdF7+M0dHYuzmAAAIDcMcEAAAC5Y4IBAAByxwQDAADkrpBNnmvWrHHZn//85/C2UfNn1EgUiVYdXLp0aab7AkUQNXmOHTvWZatXr3bZ+eefHz5mtA37O++804HRoSuLGutff/11lz300EMui1bojLZrv+qqq8Jj33zzzS6bP39+eFt0Hs5gAACA3DHBAAAAuWOCAQAAcscEAwAA5K6QTZ6RqPFTirdXB7qy5cuXu+zll1922cqVK8P7V9sCG9gYUZNn1ET/9a9/3WXDhg1zWbQa7cyZM10mxQ38KaXwtug8nMEAAAC5Y4IBAAByxwQDAADkjgkGAADIXbsTDDMbZWb3mNkcM3vKzL5YyS80s4VmNrPy5+jOHy6w8ahhlB01jDKy9jprzWyEpBEppcfNrJ+kxyRNkHSipDdTSpdnPpgZbbyoxWMppfEbe6euVsODBg1yWf/+/V3W2toa3v/dd9/NfUz4b9TwBrp16+ayHj16uKxXr14uW7FiRfiY0RUsyE3mGm73MtWUUquk1srHK81srqSRtY0PqB9qGGVHDaOMNqoHw8zGSNpd0qOV6Gwzm2VmV5nZwCr3mWRmM8xsRk0jBXJADaPsqGGUReYJhpn1lXS9pHNSSisk/UTSNpLGqW1m/e3ofimlySml8R05LQjkiRpG2VHDKJNMEwwz66G2or4mpXSDJKWUFqWU1qWU3pN0paQ9O2+YQG2oYZQdNYyyabcHw8xM0i8kzU3p/7d3/6xyVHEcxp8vopWNUQghhmiR5lbaiKAvIKaJdkkhKSwsLBRsgr6HdDaCkhSijYJpNQjpRBHRaNBEUVSuBrmFdurlWOwIaxrH3bOzc859PjDszNlizm/mW/zY+bPlwtL4keG6IMBTwLXNTFFaz0HL8N7e3qgxtaPnDO/v748a8xX27RnzXySPAU8Dnyf558XvLwFnkzwEFOA74NmNzFBanxlW68ywmvOfj6lW3dnMHo9Sc1Z6xK8mM6w1mWG1bnSGfZOnJEmqzgZDkiRVZ4MhSZKqs8GQJEnV2WBIkqTqbDAkSVJ1NhiSJKm6MS/aqulX4Pth/b5huwfWMo3j254AZrgVc63HDG9OT7XAfOsZneFJX7T1rx0nH2/7hTO1WMvB1NOx6qkW6K+eTenpOPVUC/RRj5dIJElSdTYYkiSpum02GK9ucd+1WcvB1NOx6qkW6K+eTenpOPVUC3RQz9buwZAkSf3yEokkSapu8gYjyckkXyW5meT81PtfV5LXk9xKcm1p7FCS95LcGD7v2eYcx0pyLMkHSb5M8kWS54fxJuuZihmeDzO8upZzbIbbMGmDkeQO4BXgCWAHOJtkZ8o5VHAROHnb2HngSinlBHBl2G7BX8CLpZQd4FHgueF8tFrPxpnh2THDK+ggxxcxw7M39S8YjwA3SynfllL+AN4CTk88h7WUUq4Ce7cNnwYuDeuXgCcnndSKSim7pZRPhvXfgevAURqtZyJmeEbM8MqazrEZbsPUDcZR4Iel7R+HsdYdLqXsDus/A4e3OZlVJHkAeBj4kA7q2SAzPFNm+H/pMcfNn/PeMuxNnpWVxWM5TT2ak+Ru4G3ghVLKb8vftViP1tPiOTfDWtbiOe8xw1M3GD8Bx5a27x/GWvdLkiMAw+etLc9ntCR3sgj1G6WUd4bhZuuZgBmeGTO8kh5z3Ow57zXDUzcYHwEnkjyY5C7gDHB54jlswmXg3LB+Dnh3i3MZLUmA14DrpZQLS181Wc9EzPCMmOGV9ZjjJs951xkupUy6AKeAr4FvgJen3n+F+b8J7AJ/srhu+QxwL4u7fG8A7wOHtj3PkbU8zuJnt8+AT4flVKv1THjczPBMFjO81rFrNsdmuI3FN3lKkqTqvMlTkiRVZ4MhSZKqs8GQJEnV2WBIkqTqbDAkSVJ1NhiSJKk6GwxJklSdDYYkSarub6l2cAMoAuNuAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 648x648 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(9, 9))\n",
    "for i in range(9):\n",
    "    ax = fig.add_subplot(3, 3, i + 1)\n",
    "    ax.imshow(emnist_data.x_train[i].reshape(28, 28), cmap='gray')\n",
    "    ax.set_title(emnist_data.mapping[np.argmax(emnist_data.y_train[i])])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
